package demo3;

//      接口 扩展能力非常强
//      有了接口之后, 类的使用者就不必关注具体类型, 而只关注某个类是否具备某种能力.
//      有的时候我们需要让一个类同时继承自多个父类. 这件事情在有些编程语言通过 多继承
//      的方式来实现的.然而 Java 中只支持单继承, 一个类只能 extends 一个父
//      类. 但是可以同时实现多个接口, 也能达到多继承类似的效果.现在我们通过类来表示一组动物.
class Animal{
    protected String name;

    public Animal(String name) {
        this.name = name;
    }
}
//    在父类中 我们不能写fly方法 不是所有的动物都会飞
//    把fly写成类 又不行 因为java只能单继承
//    我们可以使用IFlying接口来解决
interface IFlying{
    void fly();
}


class Dog extends Animal implements IFlying{
    public Dog(String name) {
        super(name);
    }

    @Override
    public void fly() {
        System.out.println(this.name + "正在飞");
    }
}
//      同理
interface IJumping{
    void jump();
}
interface ISwimming{
    void swimming();
}


class Frog extends Animal implements IJumping,ISwimming{
    public Frog(String name) {
        super(name);
    }

    @Override
    public void jump() {
        System.out.println(name + "正在跳");
    }
    @Override
    public void swimming() {
        System.out.println(name + "正在游泳");
    }
}

class Duck extends Animal implements ISwimming,IJumping,IFlying{
    public Duck(String name) {
        super(name);
    }

    @Override
    public void swimming() {
        System.out.println(name + "正在游泳");
    }
    @Override
    public void fly() {
        System.out.println(this.name + "正在飞");
    }
    @Override
    public void jump() {
        System.out.println(name + "正在跳");
    }
}

class robot implements IFlying{
    @Override
    public void fly() {
        System.out.println("机器人在飞");
    }
}
public class Test4 {
    public static void jumpFunc(IJumping iJumping){
        iJumping.jump();
    }
    public static void swimmingFunc(ISwimming iSwimming){
        iSwimming.swimming();
    }
    public static void flyFunc(IFlying iFlying){
        iFlying.fly();
    }

    public static void main1(String[] args) {
        jumpFunc(new Duck("鸭子"));
        jumpFunc((new Frog("青蛙")));
    }

    public static void main(String[] args) {
        flyFunc(new Duck("鸭子"));
        swimmingFunc(new Duck("青蛙"));
        flyFunc(new robot());
    }
}
